当前位置:  开发笔记 > 编程语言 > 正文

if(!this){return false; }

如何解决《if(!this){returnfalse;}》经验,为你挑选了1个好方法。

我偶然发现了这段代码这似乎完全以打破我的,但它确实发生thisnull.我只是不明白这是怎么回事null

它在一个普通的方法调用中,如

myObject->func();

在里面MyObject::func()我们有

if (!this) { return false; }

有没有什么方法可以让第一行抛出NullPointerException而不是进入null(?)方法?



1> Daniel Earwi..:

如果你有:

MyObject *o = NULL;

o->func();

接下来会发生什么取决于是否func是虚拟的.如果是,那么它将崩溃,因为它需要一个对象来获取vtable.但是如果它不是虚拟的,则调用继续将this指针设置为NULL.

我相信标准说这是"未定义的行为",所以任何事情都可能发生,但是典型的编译器只是生成代码而不检查指针是否为NULL.一些众所周知的库依赖于我所描述的行为:MFC有一个类似于SafeGetHandle可以在空指针上调用的函数,在这种情况下返回NULL.

您可能想要编写可重用的辅助函数:

void CheckNotNull(void *p)
{
    if (p == NULL)
        throw NullPointerException();
}

然后,您可以在函数的开头使用它来检查其所有参数,包括this:

CheckNotNull(this);

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有